package frsf.cidisi.exercise.proyectoia.search;

import java.util.ArrayList;

import frsf.cidisi.faia.agent.Agent;
import frsf.cidisi.faia.agent.Perception;
import frsf.cidisi.faia.environment.Environment;



public class DronePerception extends Perception {

    public static int UNKNOWN_PERCEPTION = -1;
	
	
	private int[] intensidadMedios;
	private int[] intensidadBajos;
	private ArrayList<Integer> personasAlNorte;
	private ArrayList<Integer> personasAlSur;
	private ArrayList<Integer> personasAlEste;
	private ArrayList<Integer> personasAlOeste;
	private int personasEnEsquinaActual;
	private int personasEnDiagonal;
	private int nivel;

	public  DronePerception() {
    }

    public DronePerception(Agent agent, Environment environment) {
        super(agent, environment);
    }

    /**
     * This method is used to setup the perception.
     */
    
    public void initPerception(Agent agentIn, Environment environmentIn) {
    	
        
        @SuppressWarnings("unused")
		Drone agente = (Drone) agentIn;
        DroneMapa amb = (DroneMapa) environmentIn;
        StateMapa ambiente = amb.getEnvironmentState();

        /*int nivel = ambiente.getNivDrone();
        	switch(nivel){
        	case 1:
        		this.setIntensidadMedios(ambiente.getMapa().intensidadNivelAlto());
        		this.setIntensidadBajosM1(ambiente.getMapa().getCuadranteIndex(1).getIntesidadCuadrantesBajos());
        		this.setIntensidadBajosM2(ambiente.getMapa().getCuadranteIndex(2).getIntesidadCuadrantesBajos());
        		this.setIntensidadBajosM3(ambiente.getMapa().getCuadranteIndex(3).getIntesidadCuadrantesBajos());
        		this.setIntensidadBajosM4(ambiente.getMapa().getCuadranteIndex(4).getIntesidadCuadrantesBajos());
        		break;
        	case 2:
        		this.setIntensidadBajosM1(ambiente.getMapa().getCuadranteIndex(1).getIntesidadCuadrantesBajos());
        		this.setIntensidadBajosM2(ambiente.getMapa().getCuadranteIndex(2).getIntesidadCuadrantesBajos());
        		this.setIntensidadBajosM3(ambiente.getMapa().getCuadranteIndex(3).getIntesidadCuadrantesBajos());
        		this.setIntensidadBajosM4(ambiente.getMapa().getCuadranteIndex(4).getIntesidadCuadrantesBajos());
        	case 3:
        		ArrayList<ArrayList<Integer>> lista = ambiente.getCuadranteBajoDrone().mirar(ambiente.getCoordDrone().getCoordenada());
        		this.setPersonasEnEsquinaActual(lista.get(0).get(0).intValue());
        		this.setPersonasAlNorte(lista.get(1));
        		this.setPersonasAlSur(lista.get(2));
        		this.setPersonasAlEste(lista.get(3));
        		this.setPersonasAlOeste(lista.get(4));
        		this.setPersonasEnDiagonal(lista.get(5).get(0).intValue());
        }*/
        
       
        
    }
    

    public String toString() {
    	
        StringBuffer str = new StringBuffer();
        str.append("\nNivel del Drone: " + nivel);
        str.append("; ");
        switch(nivel){
        case 1:	str.append("\nIntensidad Cuadrantes Medios: " + intensidadMedios[0] + ", " + intensidadMedios[1] + ", " + intensidadMedios[2] + ", " + intensidadMedios[3]);
            		str.append("; ");
            		 return str.toString();
		case 2: str.append("\nIntensidad Cuadrantes Medios: " + intensidadMedios[0] + ", " + intensidadMedios[1] + ", " + intensidadMedios[2] + ", " + intensidadMedios[3]);
    				str.append("; ");
    		        str.append("\nIntensidad Cuadrantes Bajos: " + intensidadBajos[0] + ", " + intensidadBajos[1] + ", " + intensidadBajos[2] + ", " + intensidadBajos[3]);
    		        str.append("; ");
    		        return str.toString();
		case 3: str.append("\nIntensidad Cuadrantes Medios: " + intensidadMedios[0] + ", " + intensidadMedios[1] + ", " + intensidadMedios[2] + ", " + intensidadMedios[3]);
				str.append("; ");
		        str.append("\nIntensidad Cuadrantes Bajos: " + intensidadBajos[0] + ", " + intensidadBajos[1] + ", " + intensidadBajos[2] + ", " + intensidadBajos[3]);
				str.append("; ");
		        str.append("\nCantidad de Personas en la esquina Actual: " + personasEnEsquinaActual);
				str.append("; ");
        return str.toString();
        }

        return str.toString();
       
    }

    // The following methods are agent-specific:
     
     public int[] getIntensidadMedios() {
    	 return intensidadMedios;
 	}
         
     public void setIntensidadMedios(int[] intensidadesMedios){
    	 intensidadMedios = intensidadesMedios;
     }

	public ArrayList<Integer> getPersonasAlNorte() {
		return personasAlNorte;
	}

	public void setPersonasAlNorte(ArrayList<Integer> personasAlNorte) {
		this.personasAlNorte = personasAlNorte;
	}

	public ArrayList<Integer> getPersonasAlSur() {
		return personasAlSur;
	}

	public void setPersonasAlSur(ArrayList<Integer> personasAlSur) {
		this.personasAlSur = personasAlSur;
	}

	public ArrayList<Integer> getPersonasAlEste() {
		return personasAlEste;
	}

	public void setPersonasAlEste(ArrayList<Integer> personasAlEste) {
		this.personasAlEste = personasAlEste;
	}

	public ArrayList<Integer> getPersonasAlOeste() {
		return personasAlOeste;
	}

	public void setPersonasAlOeste(ArrayList<Integer> personasAlOeste) {
		this.personasAlOeste = personasAlOeste;
	}

	public int getPersonasEnEsquinaActual() {
		return personasEnEsquinaActual;
	}

	public void setPersonasEnEsquinaActual(int personasEnEsquinaActual) {
		this.personasEnEsquinaActual = personasEnEsquinaActual;
	}

	public int getPersonasEnDiagonal() {
		return personasEnDiagonal;
	}

	public void setPersonasEnDiagonal(int personasEnDiagonal) {
		this.personasEnDiagonal = personasEnDiagonal;
	}

	public int[] getIntensidadBajos() {
		return intensidadBajos;
	}

	public void setIntensidadBajos(int[] intensidadBajos) {
		this.intensidadBajos = intensidadBajos;
	}
	
	public int getNivel() {
		return nivel;
	}

	public void setNivel(int niv) {
		this.nivel = niv;
	}
	
   
}
